home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / cross / Avr.lha / Atmel / INCCT_Programmer / Src / gadget.c < prev    next >
C/C++ Source or Header  |  1999-11-02  |  11KB  |  455 lines

  1. /***************************************************************************/
  2. /* INCCT GUI V1.00                                                         */
  3. /* A quickly put together GUI for the Atmel in circuit programmer.         */
  4. /* 1999 LJS                                                                */
  5. /***************************************************************************/
  6.  
  7. #define INTUI_V36_NAMES_ONLY
  8.  
  9. #include <exec/types.h>
  10. #include <exec/io.h>
  11. #include <exec/memory.h>
  12. #include <dos/dos.h>
  13. #include <devices/parallel.h>
  14. #include <intuition/intuition.h>
  15. #include <intuition/gadgetclass.h>
  16. #include <libraries/gadtools.h>
  17.  
  18. #include <clib/exec_protos.h>
  19. #include <clib/graphics_protos.h>
  20. #include <clib/intuition_protos.h>
  21. #include <clib/gadtools_protos.h>
  22. #include <clib/alib_protos.h>
  23.  
  24. #include <stdio.h>
  25.  
  26. #include "globdefs.h"
  27.  
  28. #define MYGAD_STRING1   (1)
  29. #define MYGAD_FILENAME  (2)
  30. #define MYGAD_BUTTON    (3)
  31. #define MYGAD_PROGRAM   (4)
  32. #define MYGAD_LOCK      (5)
  33. #define MYGAD_READF     (6)
  34. #define MYGAD_EEPROM    (7)
  35. #define MAXGADS 8           /*number of gadgets + 1*/
  36.  
  37. void errorMessage(STRPTR error);
  38. VOID handleGadgetEvent(struct Window *win, struct Gadget *gad, UWORD code,
  39.     struct Gadget *my_gads[]);
  40. VOID handleVanillaKey(struct Window *win, UWORD code,
  41.     struct Gadget *my_gads[]);
  42. struct Gadget *createAllGadgets(struct Gadget **glistptr, void *vi,
  43.     UWORD topborder, struct Gadget *my_gads[]);
  44. VOID process_window_events(struct Window *mywin, struct Gadget *my_gads[]);
  45. VOID gadtoolsWindow(VOID);
  46. void StartProgram(BYTE X);
  47. void StartRead(void);
  48. void FreeParallel(void);
  49. int SaveParallel(void);
  50.  
  51. extern char FileName[];
  52. char Lock=0;
  53.  
  54. struct EasyStruct myES = {
  55.     sizeof(struct EasyStruct),
  56.     0,
  57.     "Error",
  58.     "%s",
  59.     "OK"
  60. };
  61.  
  62. struct TextAttr Topaz80 = { "topaz.font", 8, 0, 0, };
  63.  
  64. struct Library      *IntuitionBase;
  65. struct Library      *GfxBase;
  66. struct Library      *GadToolsBase;
  67. struct MsgPort      *ParallelMP=NULL; 
  68. struct IOExtPar     *ParallelIO=NULL; 
  69.  
  70. int main(int argc, char *argv[])
  71. {
  72.  
  73.   FileName[0]=0;
  74.     
  75. if (NULL == (IntuitionBase = OpenLibrary("intuition.library", 37)))
  76.   printf("Can't open intuition.library V37 !!!!\n");
  77.    /*What else can we do?*/
  78. }
  79. else
  80. {
  81.   if(!create_timer())
  82.     errorMessage( "Can't open timer.device");
  83.   else
  84.   {
  85.     if(!SaveParallel())
  86.       errorMessage("Can't open parallel.device");    
  87.     else
  88.     {
  89.       if (NULL == (GfxBase = OpenLibrary("graphics.library", 37)))
  90.         errorMessage( "Requires V37 graphics.library");
  91.       else
  92.       {
  93.         if (NULL == (GadToolsBase = OpenLibrary("gadtools.library", 37)))
  94.           errorMessage( "Requires V37 gadtools.library");
  95.         else
  96.         {
  97.           if(argc>1)
  98.           {
  99.             Program_It(argc,argv);
  100.           }
  101.           else
  102.           {
  103.             gadtoolsWindow();
  104.           }
  105.           CloseLibrary(GadToolsBase);
  106.         }
  107.         CloseLibrary(GfxBase);
  108.       }
  109.       CloseDevice((struct IORequest *)ParallelIO);
  110.       FreeParallel();
  111.     }
  112.     delete_timer();
  113.   }
  114.   CloseLibrary(IntuitionBase);
  115. }
  116.   return 1;
  117. }
  118.  
  119.  
  120. void errorMessage(STRPTR error)
  121. {
  122.   if (error)
  123.   {
  124.     EasyRequest(NULL, &myES, NULL, error);
  125.   }
  126. }
  127.  
  128. VOID handleGadgetEvent(struct Window *win, struct Gadget *gad, UWORD code,
  129.     struct Gadget *my_gads[])
  130. {
  131.   switch (gad->GadgetID)
  132.   {
  133.     case MYGAD_FILENAME:
  134.         strcpy(FileName,  ((struct StringInfo *)gad->SpecialInfo)->Buffer);
  135.         break;
  136.  
  137.     case MYGAD_BUTTON: if (FileRequest())
  138.                        {
  139.                         GT_SetGadgetAttrs(my_gads[MYGAD_FILENAME], win, NULL,
  140.                             GTST_String,   FileName,
  141.                             TAG_END);
  142.                        }
  143.                       break;
  144.  
  145.     case MYGAD_PROGRAM:
  146.          StartProgram(1);
  147.          break;
  148.  
  149.     case MYGAD_READF:
  150.           StartRead();
  151.           break;
  152.  
  153.     case MYGAD_EEPROM:
  154.          StartProgram(2);
  155.          break;
  156.  
  157.     case MYGAD_LOCK:
  158.          {
  159.            Lock^=1;
  160.          }
  161.          break;
  162.   }
  163. }
  164.  
  165.  
  166. VOID handleVanillaKey(struct Window *win, UWORD code, struct Gadget *my_gads[])
  167. {
  168.  
  169.   switch (code)
  170.   {
  171.     case 's':
  172.     case 'S':
  173.         ActivateGadget(my_gads[MYGAD_FILENAME], win, NULL);
  174.         break;
  175.  
  176.     case 'w':
  177.     case 'W':
  178.          StartProgram(2);
  179.          break;
  180.  
  181.     case 'c':
  182.     case 'C':
  183.          if (FileRequest())
  184.          {
  185.            GT_SetGadgetAttrs(my_gads[MYGAD_FILENAME], win, NULL,
  186.                              GTST_String,   FileName,
  187.                             TAG_END);
  188.          }
  189.         break;
  190.     case 'l':
  191.     case 'L':
  192.         Lock^=1;
  193.         if(Lock)
  194.         {
  195.           GT_SetGadgetAttrs(my_gads[MYGAD_LOCK],win,NULL,GTCB_Checked,TRUE,TAG_END);
  196.         }
  197.         else
  198.         {
  199.           GT_SetGadgetAttrs(my_gads[MYGAD_LOCK],win,NULL,GTCB_Checked,FALSE,TAG_END);
  200.         }
  201.         break;
  202.     case 'p':
  203.     case 'P':
  204.         StartProgram(1);
  205.         break;
  206.   
  207.     case 'r':
  208.     case 'R':
  209.         StartRead();
  210.         break;
  211.   }
  212. }
  213.  
  214.  
  215. struct Gadget *createAllGadgets(struct Gadget **glistptr, void *vi,
  216.     UWORD topborder, struct Gadget *my_gads[])
  217. {
  218. struct NewGadget ng;
  219. struct Gadget *gad;
  220.  
  221. gad = CreateContext(glistptr);
  222.  
  223. ng.ng_LeftEdge   = 100;
  224. ng.ng_TopEdge    = 10+topborder;
  225. ng.ng_Width      = 200;
  226. ng.ng_Height     = 12;
  227. ng.ng_TextAttr   = &Topaz80;
  228. ng.ng_VisualInfo = vi;
  229. ng.ng_GadgetText = "";
  230. ng.ng_Flags      = NG_HIGHLABEL;
  231. ng.ng_GadgetID   = MYGAD_STRING1;
  232. my_gads[MYGAD_STRING1] = gad = CreateGadget(TEXT_KIND, gad, &ng,
  233.                     GTTX_Text,   "ATMEL In Circuit Programmer.",
  234.                     GTTX_Border, FALSE,
  235.                     TAG_END);
  236.  
  237. ng.ng_TopEdge   += 15;
  238. ng.ng_GadgetText = "_S Record:";
  239. ng.ng_GadgetID   = MYGAD_FILENAME;
  240. my_gads[MYGAD_FILENAME] = gad = CreateGadget(STRING_KIND, gad, &ng,
  241.                     GTST_String,   FileName,
  242.                     GTST_MaxChars, 256,
  243.                     GT_Underscore, '_',
  244.                     TAG_END);
  245.  
  246. ng.ng_TopEdge   += 20;
  247. ng.ng_LeftEdge   = 20;
  248. ng.ng_Width      = 100;
  249. ng.ng_Height     = 12;
  250. ng.ng_GadgetText = "Select _code";
  251. ng.ng_GadgetID   = MYGAD_BUTTON;
  252. ng.ng_Flags      = 0;
  253. my_gads[MYGAD_BUTTON] = gad = CreateGadget(BUTTON_KIND, gad, &ng,
  254.                     GT_Underscore, '_',
  255.                     TAG_END);
  256.  
  257. ng.ng_LeftEdge  += 120;
  258. ng.ng_Width      = 100;
  259. ng.ng_Height     = 12;
  260. ng.ng_GadgetText = "_Program";
  261. ng.ng_GadgetID   = MYGAD_PROGRAM;
  262. my_gads[MYGAD_PROGRAM] = gad = CreateGadget(BUTTON_KIND, gad, &ng,
  263.                     GT_Underscore, '_',
  264.                     TAG_END);
  265.  
  266. ng.ng_LeftEdge  += 170;
  267. ng.ng_Height     = 12;
  268. ng.ng_GadgetText = "_Lock";
  269. ng.ng_GadgetID   = MYGAD_LOCK;
  270. my_gads[MYGAD_LOCK] = gad = CreateGadget(CHECKBOX_KIND, gad, &ng,GT_Underscore, '_',
  271.                     TAG_END);
  272.  
  273. ng.ng_LeftEdge  -= 170;
  274. ng.ng_TopEdge   += 20;
  275. ng.ng_GadgetText = "_Read Flash";
  276. ng.ng_GadgetID   = MYGAD_READF;
  277. my_gads[MYGAD_READF] = gad = CreateGadget(BUTTON_KIND, gad, &ng,
  278.                     GT_Underscore, '_',
  279.                     TAG_END);
  280.  
  281. ng.ng_LeftEdge  -= 120;
  282. ng.ng_GadgetText = "_Write EEPROM";
  283. ng.ng_GadgetID   = MYGAD_EEPROM;
  284. my_gads[MYGAD_EEPROM] = gad = CreateGadget(BUTTON_KIND, gad, &ng,
  285.                     GT_Underscore, '_',
  286.                     TAG_END);
  287.  
  288. return(gad);
  289. }
  290.  
  291. VOID process_window_events(struct Window *mywin, struct Gadget *my_gads[])
  292. {
  293.   struct IntuiMessage *imsg;
  294.   ULONG imsgClass;
  295.   UWORD imsgCode;
  296.   struct Gadget *gad;
  297.   BOOL terminated = FALSE;
  298.  
  299.   while (!terminated)
  300.   {
  301.     Wait (1 << mywin->UserPort->mp_SigBit);
  302.  
  303.     while ( (!terminated) && (imsg = GT_GetIMsg(mywin->UserPort)) )
  304.     {
  305.       gad = (struct Gadget *)imsg->IAddress;
  306.  
  307.       imsgClass = imsg->Class;
  308.       imsgCode = imsg->Code;
  309.  
  310.       GT_ReplyIMsg(imsg);
  311.  
  312.       switch (imsgClass)
  313.       {
  314.         case IDCMP_GADGETDOWN:
  315.        /* case IDCMP_MOUSEMOVE:*/
  316.         case IDCMP_GADGETUP:
  317.                  handleGadgetEvent(mywin, gad, imsgCode, my_gads);
  318.                         break;
  319.         case IDCMP_VANILLAKEY:
  320.                 handleVanillaKey(mywin, imsgCode, my_gads);
  321.                 break;
  322.         case IDCMP_CLOSEWINDOW:
  323.                 terminated = TRUE;
  324.                 break;
  325.         case IDCMP_REFRESHWINDOW:
  326.                 GT_BeginRefresh(mywin);
  327.                 GT_EndRefresh(mywin, TRUE);
  328.                 break;
  329.       }
  330.     }
  331.   }
  332. }
  333.  
  334. VOID gadtoolsWindow(VOID)
  335. {
  336. struct TextFont *font;
  337. struct Screen   *mysc;
  338. struct Window   *mywin;
  339. struct Gadget   *glist, *my_gads[MAXGADS];
  340. void            *vi;
  341. UWORD           topborder;
  342.  
  343. if (NULL == (font = OpenFont(&Topaz80)))
  344.     errorMessage( "Failed to open Topaz 80");
  345. else
  346.     {
  347.     if (NULL == (mysc = LockPubScreen(NULL)))
  348.         errorMessage( "Couldn't lock default public screen");
  349.     else
  350.         {
  351.         if (NULL == (vi = GetVisualInfo(mysc, TAG_END)))
  352.             errorMessage( "GetVisualInfo() failed");
  353.         else
  354.             {
  355.             topborder = mysc->WBorTop + (mysc->Font->ta_YSize + 1);
  356.  
  357.             if (NULL == createAllGadgets(&glist, vi, topborder, my_gads))
  358.                 errorMessage( "createAllGadgets() failed");
  359.             else
  360.                 {
  361.                 if (NULL == (mywin = OpenWindowTags(NULL,
  362.                         WA_Title,     "INCCT "VERSION" ©1999 LJS",
  363.                         WA_Gadgets,   glist,      WA_AutoAdjust,    TRUE,
  364.                         WA_Width,       400,      WA_MinWidth,        50,
  365.                         WA_InnerHeight, 80,       WA_MinHeight,       50,
  366.                         WA_DragBar,    TRUE,      WA_DepthGadget,   TRUE,
  367.                         WA_Activate,   TRUE,      WA_CloseGadget,   TRUE,
  368.                         WA_SizeGadget, FALSE,      WA_SimpleRefresh, TRUE,
  369.                         WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW |
  370.                             IDCMP_VANILLAKEY | SLIDERIDCMP | STRINGIDCMP |
  371.                             BUTTONIDCMP,
  372.                         WA_PubScreen, mysc,
  373.                         TAG_END)))
  374.                     errorMessage( "OpenWindow() failed");
  375.                 else
  376.                     {
  377.                     GT_RefreshWindow(mywin, NULL);
  378.  
  379.                     process_window_events(mywin, my_gads);
  380.  
  381.                     CloseWindow(mywin);
  382.                     }
  383.                 }
  384.             FreeGadgets(glist);
  385.             FreeVisualInfo(vi);
  386.             }
  387.         UnlockPubScreen(NULL, mysc);
  388.         }
  389.     CloseFont(font);
  390.     }
  391. }
  392.  
  393. void StartProgram(BYTE X)
  394. {
  395.   char *Args[3];
  396.   BYTE Aargc=2;
  397.   switch(X)
  398.   {
  399.     case 1:
  400.       if(Lock)
  401.       {
  402.         Args[2]="-l";
  403.         Aargc=3;
  404.       }
  405.       break;
  406.  
  407.     case 2:
  408.       Args[2]="-ee";
  409.       Aargc=3;
  410.       break;
  411.  
  412.     default:
  413.       break;
  414.   }
  415.  
  416.   Args[0]="";
  417.   Args[1]=FileName;
  418.   Program_It(Aargc,Args);
  419. }
  420.  
  421. void StartRead(void)
  422. {
  423.   char *Args[3];
  424.   Args[0]="";
  425.   Args[1]=FileName;
  426.   Args[2]="-r";
  427.   Program_It(3,Args);
  428. }
  429.  
  430. int SaveParallel(void)
  431. {
  432.   if (ParallelMP=CreatePort(0,0) )
  433.   {
  434.     if (ParallelIO=(struct IOExtPar *)
  435.         CreateExtIO(ParallelMP,sizeof(struct IOExtPar)) )
  436.     {
  437.       if (OpenDevice(PARALLELNAME,0L,(struct IORequest *)ParallelIO,0) )
  438.       {
  439.         return 0;
  440.       }
  441.       else
  442.       {
  443.         return 1;
  444.       }
  445.     }
  446.   }
  447. }
  448.  
  449. void FreeParallel(void)
  450. {
  451.   if(ParallelIO) DeleteExtIO((struct IORequest*)ParallelIO);
  452.   if(ParallelMP) DeletePort(ParallelMP);
  453. }
  454.